关于mysql报 loopWaitCount 0, wait millis 60001 错误的解决办法 您所在的位置:网站首页 druid wait millis 关于mysql报 loopWaitCount 0, wait millis 60001 错误的解决办法

关于mysql报 loopWaitCount 0, wait millis 60001 错误的解决办法

2023-04-20 13:00| 来源: 网络整理| 查看: 265

最近遇到个比较奇怪的问题,系统上线一段时间之后,总是隔一段时间就出现Tomcat连接数据库报错,导致系统无法运行。

通过日志排查发现,里面报了一个错误,内容如下:

1 2023-04-17 00:01:05 [ ERROR ] [ AcquireJobsRunnableImpl.java :77(run)] exception during job acquisition: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: loopWaitCount 0, wait millis 60001, active 50 2 org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: loopWaitCount 0, wait millis 60001, active 50 3 at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:243) 4 at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373) 5 at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) 6 at org.activiti.spring.SpringTransactionInterceptor.execute(SpringTransactionInterceptor.java:45) 7 at org.activiti.engine.impl.interceptor.LogInterceptor.execute(LogInterceptor.java:31) 8 at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:40) 9 at org.activiti.engine.impl.cfg.CommandExecutorImpl.execute(CommandExecutorImpl.java:35) 10 at org.activiti.engine.impl.jobexecutor.AcquireJobsRunnableImpl.run(AcquireJobsRunnableImpl.java:54) 11 at java.lang.Thread.run(Unknown Source) 12 Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: loopWaitCount 0, wait millis 60001, active 50 13 at com.alibaba.druid.pool.DruidDataSource.pollLast(DruidDataSource.java:1375) 14 at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1019) 15 at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:902) 16 at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4534) 17 at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:661) 18 at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4530) 19 at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:884) 20 at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:876) 21 at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:92) 22 at org.springframework.jdbc.datasource.DataSourceTransactionManager.doBegin(DataSourceTransactionManager.java:205) 23 ... 8 more

 

这个异常可能是因为druid连接池溢出产生的异常。连接超时,是因为某个连接没有成功,而且没有开启druid的超时回收导致的。

原来的配置文件中如下:

druid.initialSize=10 druid.minIdle=10 druid.maxActive=50 druid.maxWait=60000 druid.timeBetweenEvictionRunsMillis=60000 druid.minEvictableIdleTimeMillis=300000 druid.validationQuery=SELECT 'x' druid.testWhileIdle=true druid.testOnBorrow=false druid.testOnReturn=false druid.poolPreparedStatements=true druid.maxPoolPreparedStatementPerConnectionSize=20 #druid.filters=wall,stat 设置wall导致无法创建sqlserver数据库,属性类型是字符串,通过别名的方式配置扩展插件,常用的插件有: 监控统计用的filter:stat日志用的filter:log4j防御sql注入的filter:wall druid.filters=stat

通过排查数据库配置,原来的配置没有配置垃圾回收机制,导致druid的超时回收,调整更改配置文件的xml和配置文件,分别增加如下内容

XML增加内容

 

配置文件增加内容

#druid recycle 内存回收 druid.removeAbandoned=true druid.removeAbandonedTimeout=300 druid.logAbandoned=false

通过调整配置之后,Tomcat再也没有出现以上问题。

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有